/*
 * @Author: cui DengKe
 * @Date: 2021-09-15 14:00:50
 * @LastEditors: cui DengKe
 * @LastEditTime: 2021-09-15 15:09:58
 * @Description: file content
 * @FilePath: \hello-world\src\utils\excel.worker.js
 */
import XLSX from 'xlsx'

// 处理错误的函数
const ERROR = () => {
    // 发送错误信息
    self.postMessage({ message: 'error', data: [] })

    // self.close()用于在 Worker 内部关闭自身
    self.close()
}

// 错误处理
self.addEventListener('error', (event) => {
    ERROR()

    // 输出错误信息
    console.log('ERROR: Line ', event.lineno, ' in ', event.filename, ': ', event.message)
});

/**
 * @description: 工作线程接收到主线程的消息
 * @param {object} event event.data  获取到主线程发送过来的数据
 */
self.addEventListener('message', async (event) => {
    // 向主线程发送消息
    // postMessage(event.data);

    // 解析excel数据
    parsingExcel(event.data)
}, false)

/**
 * @description: 解析excel数据
 * @param {object} data.excelFileData 文件数据
 * @param {object} data.config 配置信息
 */
const parsingExcel = (data) => {
    try {
        // 注意 { header: 1 }, 此配置项 可生成二维数组
        const { excelFileData, config = { header: 1 } } = data

        // 创建实例化对象
        const reader = new FileReader()

        // 处理数据
        reader.onload = function (e) {
            // 拿到file数据
            const result = e.target.result;
            const excelData = XLSX.read(result, { type: 'binary' })
            const data = XLSX.utils.sheet_to_json(excelData.Sheets[excelData.SheetNames[0]], config) //! 读取去除工作簿中的数据

            // 发送消息
            self.postMessage({ message: 'success', data })
        };
        // 调用方法  读取二进制字符串
        reader.readAsBinaryString(excelFileData.raw);
    } catch (err) {
        ERROR()
        console.log('解析excel数据时 catch到的错误===>', err)
    }
}

